#ifndef __Shapes_h_
#define __Shapes_h_
#define NUMPLANES 4
#define NUMSHAPES 9
#include "BaseApplication.h"

class Shapes : public BaseApplication
{
public:
	Shapes(){};
	virtual ~Shapes(){};
	virtual void createScene(void);

	void setCube(Ogre::Entity* pshapes, Ogre::SceneNode* pshapeNode, Ogre::AxisAlignedBox pshapeBox, int pIndices);
	void setSphere(Ogre::Entity* pshapes, Ogre::SceneNode* pshapeNode, Ogre::AxisAlignedBox pshapeBox, int pIndices);
	void setTetra(Ogre::Entity* pshapes, Ogre::SceneNode* pshapeNode, Ogre::AxisAlignedBox pshapeBox, int pIndices);
	void setTube(Ogre::Entity* pshapes, Ogre::SceneNode* pshapeNode, Ogre::AxisAlignedBox pshapeBox, int pIndices);
	void setPosition(Ogre::Entity* pshapes, Ogre::SceneNode* pshapeNode);
	Ogre::Entity* getEntity();
	Ogre::SceneNode* getNode();
	Ogre::Vector3* setOffsets();

	Ogre::Entity* shapes;
	Ogre::SceneNode* shapeNode;
	Ogre::AxisAlignedBox shapeBox;

	Shapes* cube[NUMSHAPES];
	Shapes* sphere[NUMSHAPES];
	Shapes* tetra[NUMSHAPES];
	Shapes* tube[NUMSHAPES];

protected:
	int hiddenInt;
	bool visible;	

	Ogre::Vector3 cubeOffset[9];
	Ogre::Vector3 sphereOffset[9];
	Ogre::Vector3 tetraOffset[9];
	Ogre::Vector3 tubeOffset[9];


private:


};
inline Ogre::Vector3* Shapes::setOffsets()
{
	cubeOffset[0] = Ogre::Vector3(70.0f,	0.0f,	10.0f);
	cubeOffset[1] = Ogre::Vector3(10.0f,	0.0f, 100.0f);
	cubeOffset[2] = Ogre::Vector3(-180.0f,	0.0f, 180.0f);
	cubeOffset[3] = Ogre::Vector3(180.0f,	0.0f, 180.0f);
	cubeOffset[4] = Ogre::Vector3(-97.0f,	0.0f, -102.0f);
	cubeOffset[5] = Ogre::Vector3(130.0f,	0.0f, -53.0f);
	cubeOffset[6] = Ogre::Vector3(152.0f,	0.0f, -173.0f);
	cubeOffset[7] = Ogre::Vector3(146.0f,	0.0f, 20.0f);
	cubeOffset[8] = Ogre::Vector3(35.0f,	0.0f, -100.0f);

	sphereOffset[9] = Ogre::Vector3(10.0f,	-100.0f, 10.0f);
	sphereOffset[10] = Ogre::Vector3(73.0f,	-100.0f, -161.0f);
	sphereOffset[11] = Ogre::Vector3(13.0f,	-100.0f, -147.0f);
	sphereOffset[12] = Ogre::Vector3(-121.0f,-100.0f, 36.0f);
	sphereOffset[13] = Ogre::Vector3(-150.0f,-100.0f, -122.0f);
	sphereOffset[14] = Ogre::Vector3(-173.0f,-100.0f, 1.0f);
	sphereOffset[15] = Ogre::Vector3(69.0f,	-100.0f, 69.0f);
	sphereOffset[16] = Ogre::Vector3(173.0f,	-100.0f, 15.0f);
	sphereOffset[17] = Ogre::Vector3(29.0f,	-100.0f, 180.0f);

	tetraOffset[0] = Ogre::Vector3(10.0f,	-200.0f, 10.0f);
	tetraOffset[1] = Ogre::Vector3(32.0f,	-200.0f, -159.0f);
	tetraOffset[2] = Ogre::Vector3(169.0f,	-200.0f, -25.0f);
	tetraOffset[3] = Ogre::Vector3(111.0f,	-200.0f, 159.0f);
	tetraOffset[4] = Ogre::Vector3(-100.0f, -200.0f, 9.0f);
	tetraOffset[5] = Ogre::Vector3(-177.0f, -200.0f, 177.0f);
	tetraOffset[6] = Ogre::Vector3(-150.0f, -200.0f, -68.0f);
	tetraOffset[7] = Ogre::Vector3(-40.0f,	-200.0f, 125.0f);
	tetraOffset[8] = Ogre::Vector3(88.0f,	-200.0f, 60.0f);

	tubeOffset[0] = Ogre::Vector3(10.0f,	-300.0f, 10.0f);
	tubeOffset[1] = Ogre::Vector3(-101.0f,	-300.0f, 162.0f);
	tubeOffset[2] = Ogre::Vector3(40.0f,	-300.0f, 154.0f);
	tubeOffset[3] = Ogre::Vector3(-30.0f,	-300.0f, 99.0f);
	tubeOffset[4] = Ogre::Vector3(127.0f,	-300.0f, 44.0f);
	tubeOffset[5] = Ogre::Vector3(136.0f,	-300.0f, -121.0f);
	tubeOffset[6] = Ogre::Vector3(-149.0f,	-300.0f, -139.0f);
	tubeOffset[7] = Ogre::Vector3(-15.0f,	-300.0f, -166.0f);
	tubeOffset[8] = Ogre::Vector3(180.0f,	-300.0f, -170.0f);
};
inline Ogre::Entity* Shapes::getEntity()
{
	return shapes;
};
inline Ogre::SceneNode* Shapes::getNode()
{
	return shapeNode;
};


#endif 